//package com.batata.continuing.config.mq;
//
//import com.rabbitmq.client.Channel;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.amqp.rabbit.annotation.*;
//import org.springframework.amqp.support.AmqpHeaders;
//import org.springframework.messaging.handler.annotation.Header;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//
//
///**
// * rabbitMq消费中心
// */
//@Slf4j
//@Component
//public class ConsumMq {
//
//
//    //监听simple队列，如果没有此队列先进性创建 简单队列消费者 返回值必须void
//    @RabbitListener(queuesToDeclare = @Queue("simple"))
//    @RabbitHandler
//    public void SimpleReceiver(
//            String content,
//            Channel channel,
//            @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag
//    ) {
//        try {
//            log.info("开始消费简单队列消息:{},消息id{}", content, deliveryTag);
//            //消费成功确认 参数1：消息id、参数2：是否把小于此id的全部确认
//            //int a=1/0;
//            channel.basicAck(deliveryTag, false);
//            log.info("消息消费成功:++++++++++++++++");
//        } catch (Exception e) {
//            e.printStackTrace();
//            //失败确认 参数1：消息id、参数2：是否否认小于此id的全部消息、参数3：是否可以从新入队
//            try {
//                channel.basicNack(deliveryTag, false, false);
//            } catch (IOException e1) {
//                e1.printStackTrace();
//            }
//        }
//    }
//
//
//    //工作模式-------------------------
//    @RabbitListener(queuesToDeclare = @Queue("work"))
//    @RabbitHandler
//    public void workReceiver1(
//            String content,
//            Channel channel,
//            @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag
//    ) throws InterruptedException, IOException {
//        log.info("work模式开始消费1：{}", content);
//        channel.basicAck(deliveryTag, false);
//        //Thread.sleep(1000);
//
//    }
//
//    @RabbitHandler
//    @RabbitListener(queuesToDeclare = @Queue("work"))
//    public void workReceiver2(
//            String content,
//            Channel channel,
//            @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag
//    ) throws IOException, InterruptedException {
//        log.info("work模式开始消费2：{}", content);
//        channel.basicAck(deliveryTag, false);
//        //Thread.sleep(2000);
//
//    }
//
//
//    //广播模式--------------------------
//    @RabbitHandler
//    @RabbitListener(bindings = @QueueBinding(
//            value = @Queue("fanout1"),
//            exchange = @Exchange("fanout.test")
//    ))
//    public void fanoutReceiver2(
//            String content, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag
//    ) throws IOException {
//        log.info("广播模式1开始消费：{}", content);
//        channel.basicAck(deliveryTag, false);
//    }
//
//    @RabbitHandler
//    @RabbitListener(bindings = @QueueBinding(
//            value = @Queue("fanout2"),
//            exchange = @Exchange("fanout.test")
//    ))
//    public void fanoutReceiver1(
//            String content,
//            Channel channel,
//            @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag
//    ) throws IOException {
//        log.info("广播模式2开始消费：{}", content);
//        channel.basicAck(deliveryTag, false);
//    }
//
//
//    //路由模式---------------------------
//    @RabbitHandler
//    @RabbitListener(bindings = @QueueBinding(
//            value = @Queue("direct1"),
//            exchange = @Exchange("direct.test"),
//            key = "a"
//    ))
//    public void directReceiver1(
//            String content,
//            Channel channel,
//            @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag
//    ) throws IOException {
//        log.info("路由模式1开始消费，{}", content);
//        channel.basicAck(deliveryTag, false);
//    }
//
//    @RabbitHandler
//    @RabbitListener(bindings = @QueueBinding(
//            value = @Queue("direct2"),
//            exchange = @Exchange("direct.test"),
//            key = "b"
//    ))
//    public void directReceiver2(
//            String content,
//            Channel channel,
//            @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag
//    ) throws IOException {
//        log.info("路由模式2开始消费，{}", content);
//        channel.basicAck(deliveryTag, false);
//    }
//
//    @RabbitHandler
//    @RabbitListener(bindings = @QueueBinding(
//            value = @Queue("direct3"),
//            exchange = @Exchange("direct.test"),
//            key = {"b", "a", "c"}
//    ))
//    public void directReceiver3(
//            String content,
//            Channel channel,
//            @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag
//    ) throws IOException {
//        log.info("路由模式3开始消费，{}", content);
//        channel.basicAck(deliveryTag, false);
//    }
//
//
//    @RabbitHandler
//    @RabbitListener(bindings = @QueueBinding(
//            value = @Queue("dlx.queue"),
//            exchange = @Exchange("dlx.exchang"),
//            key = {"aa"}
//    ))
//    public void delay1(
//            String content,
//            Channel channel,
//            @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag
//    ) throws IOException {
//        log.info("路由模式3开始消费，{}", content);
//        channel.basicAck(deliveryTag, false);
//    }
//
//}
